From 5ceb0a4532bcce03ab7219831ef70214fde8ccfe Mon Sep 17 00:00:00 2001 From: "kaf24@firebug.cl.cam.ac.uk" Date: Wed, 8 Feb 2006 11:10:52 +0100 Subject: [PATCH] Rationalise initialisation of cpu_possible_map. Signed-off-by: Keir Fraser --- linux-2.6-xen-sparse/drivers/xen/core/smpboot.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/linux-2.6-xen-sparse/drivers/xen/core/smpboot.c b/linux-2.6-xen-sparse/drivers/xen/core/smpboot.c index 91f507299b..5940fe816b 100644 --- a/linux-2.6-xen-sparse/drivers/xen/core/smpboot.c +++ b/linux-2.6-xen-sparse/drivers/xen/core/smpboot.c @@ -85,6 +85,9 @@ void __init prefill_possible_map(void) { int i, rc; + if (!cpus_empty(cpu_possible_map)) + return; + for (i = 0; i < NR_CPUS; i++) { rc = HYPERVISOR_vcpu_op(VCPUOP_is_up, i, NULL); if (rc == -ENOENT) @@ -208,7 +211,7 @@ void vcpu_prepare(int vcpu) void __init smp_prepare_cpus(unsigned int max_cpus) { - int cpu, rc; + int cpu; struct task_struct *idle; cpu_data[0] = boot_cpu_data; @@ -223,11 +226,9 @@ void __init smp_prepare_cpus(unsigned int max_cpus) if (max_cpus != 0) xen_smp_intr_init(0); - for (cpu = 1; cpu < max_cpus; cpu++) { - rc = HYPERVISOR_vcpu_op(VCPUOP_is_up, cpu, NULL); - if (rc == -ENOENT) - break; - BUG_ON(rc != 0); + for_each_cpu_mask (cpu, cpu_possible_map) { + if (cpu == 0) + continue; cpu_data[cpu] = boot_cpu_data; cpu_2_logical_apicid[cpu] = cpu; @@ -257,7 +258,6 @@ void __init smp_prepare_cpus(unsigned int max_cpus) (void *)cpu_gdt_descr[cpu].address, XENFEAT_writable_descriptor_tables); - cpu_set(cpu, cpu_possible_map); #ifdef CONFIG_HOTPLUG_CPU if (xen_start_info->flags & SIF_INITDOMAIN) cpu_set(cpu, cpu_present_map); @@ -286,7 +286,7 @@ void __init smp_prepare_cpus(unsigned int max_cpus) void __devinit smp_prepare_boot_cpu(void) { - cpu_possible_map = cpumask_of_cpu(0); + prefill_possible_map(); cpu_present_map = cpumask_of_cpu(0); cpu_online_map = cpumask_of_cpu(0); } -- 2.30.2